import axios from 'axios'
import commonMethods from './commonMethods.js'

export default function (Options) {
    return {
        /**
         * DELETE 方法
         * @method delete(urlKey, data, config, ..., argN)
         * @memberof GetData
         * @param urlKey 对应API 中的urlkey
         * @param config 发送ajax传递的参数对象
         * @param argN  可配置无数个参数，第三个至最后的一个参数会以'/'为连接符拼至请求 url 中
         * @returns {promise} 返回promise对象
         * @example
         * axios.delete('/user', {
        *   data: {
        *     ID: 12345
        *   }
        * }, path1, path2, path3...)
         */
        delete: function (urlKey, data, config) {
            var args = Array.prototype.slice.apply(arguments);
            // var url = Options.baseUrl + Options.apiList[urlKey] + '/' + args.slice(3, args.length).join('/');
            var url = commonMethods.formatUrl(Options, urlKey, args);

            var _dataTypeConfig = commonMethods.dataTypeConfig(config, data, Options);
            var _config = _dataTypeConfig.config;

            _config.data = _dataTypeConfig.data
            return axios.delete(url, _config);
        },

        /**
         * 用户自定义 URL 的 DELETE 方法
         * @method deleteUrl(url, config)
         * @memberof GetData
         * @param url 户自定义的URL
         * @param config 发送ajax传递的参数对象
         * @returns {promise} 返回promise对象
         */
        deleteUrl: function (url, data, config) {
            var _config = commonMethods.extendConfig(config, Options);
            if (!_config.data) {
                _config.data = data;
            }
            return axios.delete(url, _config);
        },

        /**
         * 调用 restful 接口的 DELETE 方法
         * @method deleteRestful(urlKey, config)
         * @memberof GetData
         * @param urlKey 对应API 中的urlkey
         * @param config 发送ajax传递的参数对象
         * @returns {promise} 返回promise对象
         */
        deleteRestful: function (urlKey, params, config) {
            // 如果用户自定义URL，则直接使用用户自定义的URL，不使用apilist
            var url = Options.baseUrl + Options.apiList[urlKey];
            var _config = commonMethods.extendConfig(config, Options);
            url = url.restfulFormat(params);
            return axios.delete(url, _config);
        },
    }
}
